package xin.petstore.framework.web.freemark;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.Map;

import com.eloancn.nback.finance.constants.FinanceUtil;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;


public class FreemarkUtil {

	/**
	 * 
	 * @param templatePath 模板文件存放路径  
	 * @param templateName 模板文件名称  
	 * @return
	 * Template
	 *
	 */
	public static Template getTemplate(String templatePath, String templateName) {

		try {
			Configuration cfg = new Configuration(Configuration.getVersion());
			// 设置要解析的模板所在的目录，并加载模板文件
			cfg.setDirectoryForTemplateLoading(new File(FinanceUtil.WebRootPath()+templatePath));
			// 设置包装器，并将对象包装为数据模型
			cfg.setObjectWrapper(Configuration.getDefaultObjectWrapper(Configuration.getVersion()));
			//设置异常处理器
			cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
			cfg.setTemplateUpdateDelay(0);
			// 获取模板,并设置编码方式，这个编码必须要与页面中的编码格式一致
			Template template = cfg.getTemplate(templateName, "UTF-8");
			return template;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 
	 * @param map 数据
	 * @param fltTemplatePath  模板位置
	 * @param ftlName		      模板名称
	 * @param htmlPath		   文件生成位置
	 * @throws Exception
	 * void
	 *
	 */
	public static void buildHtml(Map<String, Object> map,String fltTemplatePath,String ftlName,String htmlPath) throws Exception{
		try {
			Template template =FreemarkUtil.getTemplate(fltTemplatePath,ftlName);
			FileOutputStream outStream = new FileOutputStream(new File(htmlPath));
			OutputStreamWriter writer =  new OutputStreamWriter(outStream,"UTF-8");
			BufferedWriter sw = new BufferedWriter(writer);
			template.process(map, sw);
			sw.flush();
			sw.close();
			outStream.close();
		} catch (Exception e) {
			throw e;
		}
	}
}
